package com.dtf.core.common.service;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.dtf.core.common.dao.BaseDaoSupport;
import com.dtf.core.common.utils.Const;

/**
 * 所有service的超类，提供daoSupport可直接调用
 * 提供一些直接单表操作的一些方法
 * @author Administrator
 *
 * @param <T>
 */
@Service
public class BaseService extends JdbcDaoSupport{
	
	@Resource
	private BaseDaoSupport daoSupport;
	
	/**
	 * 提供分页的一些方法
	 * @return
	 */
	public BaseDaoSupport getDaoSupport() {
		return daoSupport;
	}
	
	public Object get(Object bean){
		return this.daoSupport.get(bean);
	}
	/**
	 * 直接添加一个对象到数据库
	 * @param bean
	 * @return
	 */
	public int add(Object bean){
		int count = daoSupport.add(bean);
		return count;
	}
	/**
	 * 根据bean中设置的主键，将数据更改为bean内的内容
	 * @param bean
	 * @return
	 */
	public int edit(Object bean){
		return daoSupport.edit(bean);
	}
	/**
	 * 根据fileds中的字段，获取bean中的字段作为条件，根据bean在数据库中的内容
	 * @param bean
	 * @param fileds
	 * @return
	 */
	public int editWithColumn(Object bean,String...fileds){
		return daoSupport.editWithColumn(bean, fileds);
	}
	
	/**
	 * 根据bean中设置的主键删除对应的数据
	 * @param bean
	 * @return
	 */
	public int delete(Object bean){
		return daoSupport.delete(bean);
	}
	
	/**
	 * 根据fileds中的字段，获取bean中的字段作为条件，删除数据库中对应的数据
	 * @param bean
	 * @param fileds
	 * @return
	 */
	public int deleteWithColumn(Object bean,String...fileds){
		return daoSupport.deleteWithColumn(bean, fileds);
	}
	
	public Map queryMapForSQL(String sql, Object...args){
		List list = this.getJdbcTemplate().queryForList(sql, args);
		if (Const.listIsEmpty(list)) {
			return null;
		}
		return (Map) list.get(0);
	}
	
	public Object queryBeanForSQL(String sql, Class pojoClass,Object...args){
		Map req = this.queryMapForSQL(sql, args);
		if (req == null) {
			return null;
		}
		return Const.mapCoverToBean(req, pojoClass);
	}
}
